package com.hjm.common.utils.text;

import com.hjm.common.utils.StringUtils;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * 字符集工具类
 */
public class CharsetKit
{
    /** ISO-8859-1 **/
    public static final String ISO_8859_1 = "ISO-8859-1";

    /** UTF-8 **/
    public static final String UTF_8 = "UTF-8";

    /** GBK **/
    public static final String GBK = "GBK";

    /** ISO-8859-1 **/
    public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1);

    /** UTF-8 **/
    public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8);

    /** GBK **/
    public static final Charset CHARSET_GBK = Charset.forName(GBK);

    /** 转换为Charset对象 **/
    public static Charset charset(String charset)
    {
        return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset);
    }

    /** 转换字符串的字符集编码：source 字符串、srcCharset 源字符集，默认ISO-8859-1、destCharset 目标字符集，默认UTF-8 **/
    public static String convert(String source, String srcCharset, String destCharset)
    {
        return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset));
    }

    /** 转换字符串的字符集编码 **/
    public static String convert(String source, Charset srcCharset, Charset destCharset)
    {
        if (null == srcCharset)
        {
            srcCharset = StandardCharsets.ISO_8859_1;
        }
        if (null == destCharset)
        {
            srcCharset = StandardCharsets.UTF_8;
        }
        if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset))
        {
            return source;
        }
        return new String(source.getBytes(srcCharset), destCharset);
    }

    /** 系统字符集编码 **/
    public static String systemCharset()
    {
        return Charset.defaultCharset().name();
    }

}
